//******************************************************//
//														//
//					Representante.java					//
//														//
//******************************************************//


package Actores;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Scanner;

import Persona.PersonaJuridica;
import Misc.Venta;

public class Representante extends PersonaJuridica {
    private static Float importePorTelVendido = null;
    private Integer idRepresentante;    
    private Hashtable<Vendedor, ArrayList<Venta>> htVendedores;
    
    // Constructor ==================================== 
    
    public Representante(Integer id, String n, String d, int m, String t, String r) {
        super(n, d, m, t, r);

        idRepresentante = id;
        htVendedores = new Hashtable<Vendedor, ArrayList<Venta>>();
    }
    
    // Setters ========================================
    
    public void setID(Integer id) {
        idRepresentante = id;
    } 
    
    public static void setImporteTelVend(Float n) {
        importePorTelVendido = n;
    }
    
    // Getters ========================================
    
    public Integer getRepID() {
        return idRepresentante;
    }     
    
    public static Float getImporteTelVend() {
        if( importePorTelVendido == null) {
            Scanner entrada = new Scanner (System.in);

            System.out.println("Ingrese importe por tel. vendido: ");
            Float i = entrada.nextFloat();
            
            setImporteTelVend(i);
        }    	
    	return importePorTelVendido;
    }
    
    public void getVendedores() {
    	if (htVendedores.isEmpty())
    		System.out.println("No existen vendedores en este representante.");
    	else { 
    		System.out.println("Los vendedores son los siguientes:");
    		Enumeration<Vendedor> e = htVendedores.keys();
    	
    		while (e.hasMoreElements()) {
    			Vendedor v = e.nextElement();    		 
    			System.out.println(v.toString());
    		}
    	}
    }  
    
    // Otras funciones ================================
    
    public boolean sos(Integer id) {
        return id == idRepresentante;
    }
    
    public boolean contiene(Vendedor v) {
        return htVendedores.containsKey(v);
    }

    public boolean agregarVendedor(Vendedor v) {
	 if (!htVendedores.containsKey(v)) {
	      htVendedores.put(v, new ArrayList<Venta>()); //no existe, agrego vendedor
	      return true;
	 }
	 return false;
    }

    public boolean borrarVendedor(Vendedor v) {
	 if (htVendedores.containsKey(v)) {
	      htVendedores.remove(v);
	      return true;
	 }
	 return false;
    }

    public boolean agregarVenta(Vendedor v, Venta vta) {
	 //if (!htVendedores.containsKey(v)) { VOLO NO PONER 
	      return htVendedores.get(v).add(vta);
    }   
    
    public void informarTotalRep() {
      	 Enumeration<Vendedor> e = htVendedores.keys();

      	 Float totalRep = 0.0f;
      	 float antiguedad = 0;     
      	 float impTel=0;
      	 
      	 while (e.hasMoreElements()) {
      		  int cantTel = 0;
      		  antiguedad = 0;
      		  impTel=0;
      		  
      		  Vendedor vendedor = e.nextElement();

      	      Float totalVendedor = Vendedor.getSueldoBasico();

      	      for (Venta v : htVendedores.get(vendedor)) {      		  
      		   cantTel += v.getCantLineas();
      	      }      	      
      	      
      	      antiguedad = vendedor.calcularAntiguedad();
      	      impTel = cantTel * Representante.getImporteTelVend();
      	      totalVendedor= Vendedor.getSueldoBasico()+ impTel+ antiguedad;
      	      
      	      System.out.print(
                         "\nVendedor: " + vendedor.toString()
      		      +"\n\nCantidad tel vendidos: " + cantTel + " - "
      		      + "Importe por telefonos: $" + impTel                
      		      +"\nBonus antiguedad: $" + antiguedad
      		      +"\nSueldo basico: $" + Vendedor.getSueldoBasico()
                  +"\nTOTAL SUELDO: $" + totalVendedor);

      	      totalRep += totalVendedor;
      	 }
      	 System.out.print("\n\nEn el representante " + this.getNombre()
                    + " se debe pagar un total de $" + totalRep +
                    " en concepto de sueldos.\n\n");
       }   
}
